// 引入获取商品数据模块
import getData from "../modules/getData.js"
// 引入视图模块
import { cartView } from "../modules/view.js";
import changeLocalData from "../modules/changeLocalData.js"
import allCheckChange from "../modules/allCheckChange.js"
import removeSelectData from "../modules/removeSelectData.js"
// 获取购物车数据
let cartData = JSON.parse(localStorage.getItem("cartData")) || [];
// 获取商品数据
const data = getData();

const tbody = document.querySelector("tbody");
const allCheck = document.querySelector(".allCheck");
const allNumber = document.querySelector(".allNumber");
const allPrice = document.querySelector(".allPrice");
const removeSelect = document.querySelector(".removeSelect");
// 将数据传给视图，由视图完成比对和渲染
cartView( tbody, data, cartData );

// 单个选中
tbody.addEventListener("change", function(eve){
  const e = eve || window.event;
  const target = e.target || e.srcElement;
  if(target.className === "check"){
    const id = target.parentNode.parentNode.dataset.id;
    const check = target.checked;
    // 根据获取到的id和选中状态，更新本地存储中的数据
    changeLocalData(cartData, id, (i)=>{
      cartData[i].check = check;
    });

    // 全选的初始状态
    allCheck.checked = cartData.every(val=>val.check);
  }
})
// 改变数量
tbody.addEventListener("input", function(eve){
  const e = eve || window.event;
  const target = e.target || e.srcElement;
  if(target.className === "setNum"){
    const id = target.parentNode.parentNode.dataset.id;
    const n = target.value-0;
    // 根据获取到的id和选中状态，更新本地存储中的数据
    changeLocalData(cartData, id, (i)=>{
      cartData[i].num = n;
    });

    // 计算总数量
    allNumber.innerText = cartData.reduce((prev, val)=>prev+val.num, 0);
    // 计算总价
    allPrice.innerText = cartData.reduce((prev, val)=>prev+(val.num*val.price), 0);
  }
})
// 删除单个
tbody.addEventListener("click", function(eve){
  const e = eve || window.event;
  const target = e.target || e.srcElement;
  if(target.className === "remove"){
    const id = target.parentNode.dataset.id;
    target.parentNode.remove();
    // 根据获取到的id和选中状态，更新本地存储中的数据
    changeLocalData(cartData, id, (i)=>{
      cartData.splice(i, 1);
    });

    // 全选的初始状态
    allCheck.checked = cartData.every(val=>val.check);
  }
})

// 全选的初始状态
allCheck.checked = cartData.every(val=>val.check);
// 全选的改变，影响所有单个选中
allCheck.onchange = function(){
  allCheckChange( cartData, this.checked );
}

// 计算总数量
allNumber.innerText = cartData.reduce((prev, val)=>prev+val.num, 0);
// 计算总价
allPrice.innerText = cartData.reduce((prev, val)=>prev+(val.num*val.price), 0);

// 删除选中
removeSelect.onclick = function(){
  // 删除选中后，覆盖原购物车数据
  cartData = removeSelectData(cartData);
  // 计算总数量
  allNumber.innerText = cartData.reduce((prev, val)=>prev+val.num, 0);
  // 计算总价
  allPrice.innerText = cartData.reduce((prev, val)=>prev+(val.num*val.price), 0);
}